import { IPSSysDBScheme } from '../../database/ipssys-dbscheme';
import { IPSDataEntity } from '../ipsdata-entity';
import { IPSDEAction } from '../action/ipsdeaction';
import { IPSDELogicNode } from './ipsdelogic-node';
import { IPSDELogicParam } from './ipsdelogic-param';

/**
 *
 * 继承父接口类型值[RAWSQLANDLOOPCALL]
 * @export
 * @interface IPSDERawSqlAndLoopCallLogic
 */
export interface IPSDERawSqlAndLoopCallLogic extends IPSDELogicNode {
  /**
   * 目标实体行为对象
   *
   * @type {IPSDEAction}
   */
  getDstPSDEAction(): IPSDEAction | null;

  /**
   * 目标实体行为对象
   *
   * @type {IPSDEAction}
   */
  get dstPSDEAction(): IPSDEAction | null;

  /**
   * 目标实体行为对象（必须存在）
   *
   * @type {IPSDEAction}
   */
  getDstPSDEActionMust(): IPSDEAction;

  /**
   * 目标实体对象
   *
   * @type {IPSDataEntity}
   */
  getDstPSDataEntity(): IPSDataEntity | null;

  /**
   * 目标实体对象
   *
   * @type {IPSDataEntity}
   */
  get dstPSDataEntity(): IPSDataEntity | null;

  /**
   * 目标实体对象（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getDstPSDataEntityMust(): IPSDataEntity;

  /**
   * 数据库体系
   *
   * @type {IPSSysDBScheme}
   */
  getPSSysDBScheme(): IPSSysDBScheme | null;

  /**
   * 数据库体系
   *
   * @type {IPSSysDBScheme}
   */
  get psSysDBScheme(): IPSSysDBScheme | null;

  /**
   * 数据库体系（必须存在）
   *
   * @type {IPSSysDBScheme}
   */
  getPSSysDBSchemeMust(): IPSSysDBScheme;

  /**
   * SQL代码
   * @type {string}
   */
  sql: string;

  /**
   * 附加源参数对象
   *
   * @type {IPSDELogicParam}
   */
  getSrcPSDELogicParam(): IPSDELogicParam | null;

  /**
   * 附加源参数对象
   *
   * @type {IPSDELogicParam}
   */
  get srcPSDELogicParam(): IPSDELogicParam | null;

  /**
   * 附加源参数对象（必须存在）
   *
   * @type {IPSDELogicParam}
   */
  getSrcPSDELogicParamMust(): IPSDELogicParam;
}
